Tugas UAS ini bertujuan untuk mengukur kemampuan dalam membuat
visualisasi data yang informatif menggunakan R Markdown. Dataset yang
digunakan berasal dari file Data.xlsx.
Proyek ini mengikuti struktur sebagai berikut:
project/
├── data/
├── figures/
├── docs/
├── script/
└── styles.css
# Validasi file dan membaca dataset
setwd("C:/Users/ACER/OneDrive/Documents/UAZ DATAVIZ")
if (!file.exists("data.xlsx")) {
stop("File data.xlsx tidak ditemukan. Pastikan file berada di direktori yang benar.")
}
data <- read_xlsx("data.xlsx")
required_columns <- c("Pendapatan_per_kapita", "Angka_Harapan_Hidup")
if (!all(required_columns %in% names(data))) {
stop("Beberapa kolom yang diperlukan tidak ditemukan di dataset.")
}
print(names(data))
## [1] "geo" "Negara" "Benua"
## [4] "Tahun" "Angka_Harapan_Hidup" "Pendapatan_per_kapita"
## [7] "Populasi" "Jumlah_anak"
Grafik berikut menunjukkan distribusi angka harapan hidup dalam dataset. Histogram ini membantu kita memahami persebaran nilai, termasuk apakah data condong ke kanan, ke kiri, atau simetris.
# Histogram untuk variabel numerik
p1 <- ggplot(data, aes(x=Angka_Harapan_Hidup)) + # Gunakan backticks jika ada spasi di nama kolom
geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
labs(title = "Distribusi Angka Harapan Hidup",
x = "Angka_Harapan_Hidup",
y = "Frekuensi") +
theme_minimal()
if (!dir.exists("figures")) dir.create("figures")
ggsave("figures/scatterplot.png", p1)
## Saving 7 x 5 in image
print(p1)
Grafik berikut menunjukkan distribusi pendapatan per kapita. Grafik ini penting untuk melihat pola umum, seperti adanya outlier atau pola tertentu pada data.
p2 <- ggplot(data, aes(x = Pendapatan_per_kapita)) +
geom_histogram(binwidth = 2100, fill = "lightgreen", color = "black") +
labs(title = "Distribusi Pendapatan per Kapita",
x = "Pendapatan per Kapita",
y = "Frekuensi") +
theme_minimal()
ggsave("figures/histogram2.png", p2)
## Saving 7 x 5 in image
print(p2)
Scatter plot berikut menunjukkan hubungan antara pendapatan per kapita dan angka harapan hidup. Grafik ini membantu melihat apakah ada pola hubungan linear, seperti semakin tinggi pendapatan, semakin tinggi angka harapan hidup.
p2 <- ggplot(data, aes(x = Pendapatan_per_kapita, y = `Angka_Harapan_Hidup`)) +
geom_point(color = "darkred", alpha = 0.5) +
labs(title = "Hubungan antara Pendapatan per Kapita dan Angka Harapan Hidup",
x = "Pendapatan_per_Kapita",
y = "Angka_Harapan_Hidup") +
theme_minimal()
ggsave("figures/scatterplot2.png", p2)
## Saving 7 x 5 in image
print(p2)
Populasi sebagai ukuran gelembung dan Benua sebagai kategori warna.
p3 <- ggplot(data, aes(x = Angka_Harapan_Hidup,
y = `Pendapatan_per_kapita`,
size = Populasi, color = Benua)) +
geom_point(alpha = 0.5) +
scale_size(range = c(2, 12)) +
labs(title = "Hubungan Multivariat Antar Variabel",
x = "Angka Harapan Hidup",
y = "Pendapatan per Kapita",
size = "Populasi",
color = "Benua") +
theme_minimal()
ggsave("figures/bubbleplot.png", p3)
## Saving 7 x 5 in image
print(p3)
heatmap_data <- data %>%
group_by(Benua, Tahun) %>%
summarize(MeanLifeExpectancy = mean(`Angka_Harapan_Hidup`, na.rm = TRUE), .groups = 'drop')
p3 <- ggplot(heatmap_data, aes(x = Tahun, y = Benua, fill = MeanLifeExpectancy)) +
geom_tile() +
labs(title = "Heatmap Angka Harapan Hidup Rata-rata",
x = "Tahun",
y = "Benua",
fill = "Rata-rata Harapan Hidup") +
theme_minimal()
ggsave("figures/heatmap.png", p3)
## Saving 7 x 5 in image
print(p3)
A. pembaca dapat mengeksplorasi hubungan antar variabel secara langsung.
p4 <- plot_ly(data, x = ~Angka_Harapan_Hidup,
y = ~`Pendapatan_per_kapita`,
type = 'scatter',
mode = 'markers',
marker = list(size = 4, color = ~as.factor(Benua))) %>%
layout(title = "Scatter Plot Interaktif",
xaxis = list(title = "Angka Harapan Hidup"),
yaxis = list(title = "Pendapatan per Kapita"))
htmlwidgets::saveWidget(as_widget(p4), "figures/plotly_scatter.html")
## Warning in dir.create(target_dir):
## 'plotly_scatter_files\htmltools-fill-0.5.8.1' already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\htmlwidgets-1.6.4'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\plotly-binding-4.10.4'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\typedarray-0.1'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\jquery-3.5.1' already
## exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\crosstalk-1.2.1'
## already exists
## Warning in dir.create(target_dir):
## 'plotly_scatter_files\plotly-htmlwidgets-css-2.11.1' already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\plotly-main-2.11.1'
## already exists
p4
B. Grafik interaktif 3D
p4 <- plot_ly(data, x = ~`Pendapatan_per_kapita`, y = ~`Angka_Harapan_Hidup`, z = ~Populasi,
type = "scatter3d", mode = "markers",
marker = list(size = 5, color = ~Populasi, colorscale = "Viridis"))
p4
perubahan indikator sosial-ekonomi global dari waktu ke waktu.
p5 <- ggplot(gapminder, aes(x = gdpPercap,
y = lifeExp,
size = pop,
color = continent)) +
geom_point(alpha = 0.7) +
scale_x_log10() +
labs(title = "Gapminder: Perubahan dari Tahun ke Tahun",
x = "Pendapatan per Kapita (log scale)",
y = "Angka Harapan Hidup",
size = "Populasi",
color = "Benua") +
theme_minimal() +
gganimate::transition_states(year, transition_length = 2, state_length = 1) +
gganimate::enter_fade() +
gganimate::exit_fade() +
labs(subtitle = "Tahun: {closest_state}")
anim <- gganimate::animate(p5, nframes = 100, renderer = gganimate::gifski_renderer())
gganimate::anim_save("gapminder_animation.gif", animation = anim)
knitr::include_graphics("gapminder_animation.gif")
p5 <- ggplot(gapminder, aes(x = gdpPercap, y = lifeExp, size = pop, color = continent)) +
geom_point(alpha = 0.7) +
scale_x_log10() +
labs(title = "Hubungan GDP per Capita dan Life Expectancy",
x = "GDP per Capita",
y = "Life Expectancy") +
theme_minimal()
print(p5)
p6 <- p5 +
transition_time(year) +
labs(title = "Year: {frame_time}") +
shadow_mark(alpha = 0.3, size = 0.5)
animate(p6, renderer = gifski_renderer())
Berdasarkan analisis visual: